package com.efrei.schoolmanager.model;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.swing.table.AbstractTableModel;

import com.efrei.schoolmanager.controlers.ControleurEleves;
import com.efrei.schoolmanager.model.obj.Classe;
import com.efrei.schoolmanager.model.obj.Eleve;
import com.efrei.schoolmanager.tools.Tools;

/**
 * gére une liste d'eleve en lecture seule dans un tableau
 */
public class ModeleListeEleves extends AbstractTableModel{
	private static final long serialVersionUID = 3932218594634138968L;
	
	private List<Eleve> eleves;
	private List<Eleve> elevesFiltered;
	private final String[] entetes = {"Nom","Prénom", "Classe",};

	private Classe classeFilter;

	//private ControleurEleves controleur;
	
	public ModeleListeEleves(ControleurEleves controleur) {
		//this.controleur = controleur;
		eleves = controleur.getEleves();
		///par défaut, pas de filtre
		elevesFiltered = eleves;
	}
	
	public int getRowCount() {
		return elevesFiltered.size();
	}

	public int getColumnCount() {
		return entetes.length;
	}

	public String getColumnName(int columnIndex) {
		return entetes[columnIndex];
	}

	public Object getValueAt(int rowIndex, int columnIndex) {
		switch(columnIndex){
			case 0:
				return elevesFiltered.get(rowIndex).getNom();
			case 1:
				return elevesFiltered.get(rowIndex).getPrenom();
			case 2:
				Set<Classe> classes =elevesFiltered.get(rowIndex).getClasses();
				Classe choisie=null;
				for (Classe classe : classes) {
					if(choisie==null)
					{
						choisie=classe;
					}
					if(choisie.getPromotion()<classe.getPromotion())
					{
						choisie=classe;
					}
				}
				if(choisie==null)
					return "Aucune classe disponible";
				else
					return Tools.formatPromotion(choisie.getPromotion());

			default:
				return ""; //Ne devrait jamais arriver
		}
	}

	public void filterByClasse(Classe classe) {
		this.classeFilter = classe;

		if(classeFilter==null) {
			elevesFiltered = eleves;
		} else {
			elevesFiltered = new ArrayList<Eleve>();
			for (Eleve eleve : eleves) {
				//on ajoute a elevesFiltered les eleves dans la classe "classeFilter"
				if(eleve.getClasses().contains(classeFilter))
					elevesFiltered.add(eleve);
			}
		}
	}

	public Eleve getEleveAtRow(int rowIndex) {
		return elevesFiltered.get(rowIndex);
	}

}
